﻿#include "ImportWindow.h"
#include "ui_ImportWindow.h"
#include <QFileDialog>
#include "SQLOperation/SQLManagement.h"
#include "PublicData.h"
#include <QMessageBox>

ImportWindow::ImportWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::ImportWindow)
{
    ui->setupUi(this);
    initTableWidget();
}

ImportWindow::~ImportWindow()
{
    delete ui;
}

//初始化自定义TableWidget
void ImportWindow::initTableWidget(){
    ui->tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);//不允许双击修改表格
    ui->tableWidget->setSelectionBehavior(QAbstractItemView::SelectRows);//一次选择一行
    ui->tableWidget->setSelectionMode(QAbstractItemView::SingleSelection); //设置选择模式，选择单行
    ui->tableWidget->setFocusPolicy(Qt::NoFocus); //让table失去焦点
}

//获取机型id
void ImportWindow::getPlaneTypeID(int planeTypeID)
{
    m_PlaneTypeID = planeTypeID;
}

//添加文件
void ImportWindow::on_pbAdd_clicked()
{
    QString curPath = QDir::currentPath(); //获取系统当前目录
    QString dlgTitle = "选择文件"; //对话框标题
    //    QString filter="文本文件(*.txt);;可扩展标记语言(*.xml);;所有文件(*.*)"; //文件过滤器
    QString filter="所有文件(*.*)"; //文件过滤器
    QStringList filePathList = QFileDialog::getOpenFileNames(this,dlgTitle,curPath,filter);

    for (int i=0;i<filePathList.count();i++) {
        int rowCount = ui->tableWidget->rowCount();
        ui->tableWidget->insertRow(rowCount);

        QFileInfo fileInfo = QFileInfo(filePathList.at(i)); //获取到文件对象
        ui->tableWidget->setItem(rowCount,0,new QTableWidgetItem(fileInfo.fileName()));
        ui->tableWidget->setItem(rowCount,1,new QTableWidgetItem(fileInfo.suffix()));
        ui->tableWidget->setItem(rowCount,2,new QTableWidgetItem(QString::number(fileInfo.size())));
        ui->tableWidget->setItem(rowCount,3,new QTableWidgetItem(fileInfo.filePath()));
    }
    addTipsInfo("添加文件成功");
}

//交换两行数据
void ImportWindow::swapTwoRow(int selectRow, int targetRow)
{

    QStringList selectRowLine, targetRowLine; //用于存储交换的两行数据
    int columnCount = 4; //四列
    for (int i=0;i<columnCount;i++) {  //获取文本，并添加进QStringLine
        selectRowLine.append(ui->tableWidget->item(selectRow,i)->text());
        targetRowLine.append(ui->tableWidget->item(targetRow,i)->text());
    }
    for (int i=0;i<columnCount;i++) {  //设置文本
        ui->tableWidget->setItem(selectRow,i,new QTableWidgetItem(targetRowLine.at(i)));
        ui->tableWidget->setItem(targetRow,i,new QTableWidgetItem(selectRowLine.at(i)));
    }
}

//文件上移
void ImportWindow::on_pbUp_clicked()
{
    int currentRow = ui->tableWidget->currentRow(); //获取当前行的index
    if(-1 != currentRow) //如果选中了数据
    {
        if(0 != currentRow) //如果选中的不是第一行
        {
            swapTwoRow(currentRow,currentRow-1);  //执行数据交换
            addTipsInfo("文件下移成功");
            ui->tableWidget->setCurrentCell(currentRow - 1 , QItemSelectionModel::Select); //移动过后继续选定该行
        }
    }
    else{
        if(0 != ui->tableWidget->rowCount()){ //如果有数据，但是currentRow=--1 说明没有选择数据,把焦点定位到第一行
            addTipsInfo("无法移动：未选中数据");
        }else{
            addTipsInfo("无法移动：表格没有数据");
        }
    }
}

//文件下移
void ImportWindow::on_pbDown_clicked()
{
    int currentRow  = ui->tableWidget->currentRow();
    if(-1 != currentRow) //如果选中了一行
    {
        if(currentRow != ui->tableWidget->rowCount()-1) //如果不是最后一行
        {
            swapTwoRow(currentRow,currentRow+1); //交换数据
            addTipsInfo("文件下移成功");
            ui->tableWidget->setCurrentCell(currentRow+1,QItemSelectionModel::Select); //移动后继续选定该行
        }
    }
    else{
        if(0 != ui->tableWidget->rowCount()){ //如果有数据，但是currentRow=-1 说明没有选择数据,把焦点定位到第一行
            addTipsInfo("无法移动：未选中数据");
        }else{
            addTipsInfo("无法移动：表格没有数据");
        }
    }
}

//删除文件
void ImportWindow::on_pbDelete_clicked()
{
    int currentRow = ui->tableWidget->currentRow(); //当前选中项
    if(-1 != currentRow){
        ui->tableWidget->removeRow(currentRow);
        addTipsInfo("删除文件成功");
    }
}

//导入文件
void ImportWindow::on_pbImport_clicked()
{
    //TODO导入文件，获取文件名称，写入list列表
    /***
1、传入ICD文件路径，调用适配DLL将ICD信息转换成统一格式的ICD信息
2、将统一格式的ICD信息存储到单独的数据库文件
3、在软件使用的数据库中添加ICD记录
*/
    ICD_INFO icdInfo;
    //TODO填写icd info信息
    m_CrrentDateTime = QDateTime::currentDateTime();
    icdInfo.icd_version =1.0;  //TODO将名称和版本放在一起
    icdInfo.icd_import_time=m_CrrentDateTime.toString("yyyy-MM-dd");
    icdInfo.icd_plane_type_id = m_PlaneTypeID;
    ui->pBarImport->setRange(0,100); //TODO进度条还需要完善

    if(SQLManagement::Instance()->InsertICDData(icdInfo)){
        ui->pBarImport->setValue(100);
        addTipsInfo("数据导入成功");
    }else{
        addTipsInfo("数据导入失败");
    }
}

//新增提示信息
void ImportWindow::addTipsInfo(QString context)
{
    QListWidgetItem* item = new QListWidgetItem();
    item->setData(Qt::DisplayRole,context);
    ui->listTipsInfo->addItem(item);
}

//关闭窗口
void ImportWindow::on_pbCancle_clicked()
{
    this->close();
}
